import os
import presscheck
import platformcmd
import presschmod

'''
错误码匹配规则：
r'(ret):\s*(\d+)',---灵妖匹配规则
r'.*(resp code is not ok).*"code":"(\d+)"' ---LD项目匹配规则
r'.*(messageId):\s*(\d+)', --- 西游locust 匹配规则
'''

if __name__ == '__main__':
    # 需求表excel路径
    yan_filepath = r'D:\CTC_Server_Projs\common_tools_projs\auto_press\src\autotool\dataneed\西游压测工具验收.xlsx'
    # 协议统计日志路径
    summarpro_path = r'D:\CTC_Server_Projs\common_tools_projs\auto_press\src\autotool\tempbot\bot_202501151411.csv'
    # 覆盖协议及任务
    procover_dict = {
        # 需求表路径及参数
        'yan_filepath': yan_filepath,
        'yan_pro_sheet': 'bot新协议覆盖',  # 协议覆盖sheet表名
        'model_cl': '节点模块',  # 功能模块列名
        'proto_cl': '覆盖协议',  # 对应协议列名
        'feature_mix': False,  # 为 True时，混压全功能检测协议，feature_test指定单功能失效
        'feature_test': '好友',  # 测试功能模块名
        'csv_write': False,  # 是否将匹配结果写入csv日志
        # 日志表路径及参数
        'log_filepath': summarpro_path,
        'log_pro_cl': 'Name',  # 日志协议列名
        'log_total': 'Aggregated',  # 汇总行名,需要在协议列除去
        'locustpro': False,  # locust专加，locust需多加需求表sheet:task覆盖  列名 ：task任务列

    }
    # presscheck.log_protocols(procover_dict)
    # 错误码统计
    logercode_dict = {
        # 需求表路径及参数
        'yan_filepath': yan_filepath,
        'yan_err_sheet': '错误码',  # 错误码sheet表名
        'errcode_cl': '错误码id',  # 错误码id列名
        'detail_cl': '错误码描述',  # 错误码描述列名
        'csv_write': False,  # 是否将匹配结果写入csv日志
        # 日志表目录或文件及参数
        'log_file_path': r'D:\CTC_Server_Projs\common_tools_projs\auto_press\src\autotool\tempbot\xylocuLogs',
        # 错误码文件或目录路径
        'regex': r'.*(messageId):\s*(\d+)',  # 西游 匹配规则
    }
    # presscheck.log_errcodes(logercode_dict)
    # 项目方工具---locust权重自带，不检验
    # 需求表excel路径
    # yan_filepath = r'D:\CTC_Server_Projs\common_tools_projs\auto_press\src\autotool\dataneed\【LD】压测工具验收报告_20241224.xlsx'
    # # 协议统计日志路径
    # summarpro_path = r'D:\CTC_Server_Projs\common_tools_projs\auto_press\src\autotool\tempbot\record_20250110184518.csv'
    weight_dict = {
        # 需求表路径及参数
        # 混压列表及参数
        'yan_filepath': yan_filepath,
        'weight_sheet': '混压列表',  # 混压权重配置表
        'weight_model': '功能模块',  # 功能模块列名
        'weight_num': '混压权重',  # 功能模块列名

        # 协议覆盖表及参数
        'yan_pro_sheet': '协议覆盖',  # 协议覆盖sheet表名
        'model_cl': '所属模块',  # 功能模块列名
        'proto_cl': '协议号',  # 对应协议列名

        # 日志表路径及参数
        'log_filepath': summarpro_path,
        'log_pro_cl': '消息ID',  # 日志协议列名
        'log_total': '999999',  # 汇总行名,需要在协议列除去
        'pro_sum': '请求数量',  # 日志协议请求数量列名
        'csv_write': False,  # 是否将匹配结果写入csv日志
    }
    # presscheck.feature_weight(weight_dict)

    problem_dict = {
        # 日志表路径及参数
        'log_filepath': summarpro_path,
        'log_pro_cl': 'Name',  # 日志协议列名
        'log_total': 'Total',  # 汇总行名,需要在协议列除去
        'pro_success': 'Success',  # 成功率列名
        'pro_tps': 'TPM',  # tps列名,或tpm
        'pro_max': 'Max',  # 最大响应列名
        'pro_avg': 'Avg',  # 平均响应列名
        'pro_90th': 'Avg90',  # 成功率列名
        'csv_write': False,  # 是否将匹配结果写入csv日志
        'locustpro': False,
    }
    # presscheck.stats_problem(problem_dict)

    # 驱动shell命令
    job_log_cmd = """
        echo "`eval $NOW` job_log"
        cd /data/lserver/log
        echo "机器人是否全登录"
        cat robot.log |grep '已全部'|head -1
        echo "错误码"
        cat robot.log |grep 'resp code is not ok'|head -1
        echo "error"
        cat robot.log |grep error|head -1
        echo "failed"
        cat robot.log |grep failed|head -1
    """
    # # 执行命令并获取输出结果
    # output = platformcmd.run_command(job_log_cmd)
    # # 输出结果
    # print(output)
    # locust改配置
    # locu_filepath = r'D:\CTC_Server_Projs\common_tools_projs\auto_press\src\autotool\dataneed\xiyou'  # locust全路径根
    # xybot_config = r'D:\CTC_Server_Projs\common_tools_projs\auto_press\src\autotool\dataneed\bot\config.xml'  # 换前缀
    # xybot_txt = r'D:\CTC_Server_Projs\common_tools_projs\auto_press\src\autotool\dataneed\bot\data\bot\bot_data.txt'  # 切功能
    # # 切功能
    # fea_chmod = {
    #     'filepath': xybot_txt,
    #     'press_feature': '42'
    # }
    # presschmod.botfeature(fea_chmod)
    # # 改账号前缀
    # prefix_chmod = {
    #     'filepath': xybot_filepath,
    #     'prefix': 'bot2bot'
    # }
    # presschmod.botprefix(prefix_chmod)

    # -------locust改配置----------
    # # 换功能
    # locu_filepath = r'D:\CTC_Server_Projs\common_tools_projs\auto_press\src\autotool\dataneed\xiyou'  # locust全路径根
    # press_feature = 'l_player.py'
    # regex1 = r'(/.+/)[^/]+\s+--worker'
    # new_content1 = rf'\1{press_feature} --worker'
    # regex2 = r'(/.+/)[^/]+\s+--master'
    # new_content2 = rf'\1{press_feature} --master'
    # file1 = os.path.join(locu_filepath, 'run_slave.sh')
    # file2 = os.path.join(locu_filepath, 'run_master.sh')
    # # 换前缀  locust
    # old_content_regex = r'prefix\s*=\s*\'\w+\''
    # new_content = "prefix = 'bot3bot'"
    # file3 = os.path.join(locu_filepath, 'Loadtests\TestParam.py')
    # presschmod.modify_file_content(file3, old_content_regex, new_content)
    # presschmod.modify_file_content(file1, regex1, new_content1)
    # presschmod.modify_file_content(file2, regex2, new_content2)

    # 切功能-bot xiyou
    # fea_chmod = {'filepath': r'D:\CTC_Server_Projs\common_tools_projs\auto_press\src\autotool\dataneed\bot\data\bot\bot_data.txt', 'press_feature': '67'}
    # old_content_regex = r'rootNode\nstring\n\d+'
    # new_content = rf'rootNode\nstring\n{fea_chmod [ "press_feature" ]}'
    # presschmod.modify_file_content(fea_chmod [ 'filepath' ], old_content_regex, new_content)
    # # 换前缀-bot xiyou
    # old_content_regex = r'(<uuidPrefix>)[^<]*(</uuidPrefix>)'
    # new_content = r'\g<1>bot7temp\g<2>'
    # file4 = r'D:\CTC_Server_Projs\common_tools_projs\auto_press\src\autotool\dataneed\bot\config.xml'
    # presschmod.modify_file_content(file4, old_content_regex, new_content)
